import request from '../../../utils/request'

Page({
  data: {
    userId: 0,
    showModal: false,
    familyOptions: [], // 存储{id: elderlyId, name: elderlyName}
    familyIndex: -1,
    formData: {
      name: '', // 预约人姓名
      phone: '', // 预约人手机号
      family: '', // 选中的家人姓名
      familyId: '', // 选中的家人elderlyId（老人id）
      selectedDate: '', // 预约日期（YYYY-MM-DD）
      selectedTime: '' // 预约时间（HH:MM）
    },
    isSelect: 0, // 控制提交按钮样式
    today: '', // 今日日期
    timeSessions: [{
        sessionId: 'morning',
        sessionName: '上午8:00 - 12:00',
        times: [{
            id: 1,
            time: '08:00'
          },
          {
            id: 2,
            time: '08:30'
          },
          {
            id: 3,
            time: '09:00'
          },
          {
            id: 4,
            time: '09:30'
          },
          {
            id: 5,
            time: '10:00'
          },
          {
            id: 6,
            time: '10:30'
          },
          {
            id: 7,
            time: '11:00'
          },
          {
            id: 8,
            time: '11:30'
          },
          {
            id: 9,
            time: '12:00'
          }
        ]
      },
      {
        sessionId: 'afternoon',
        sessionName: '下午12:30 - 18:00',
        times: [{
            id: 10,
            time: '12:30'
          },
          {
            id: 11,
            time: '13:00'
          },
          {
            id: 12,
            time: '13:30'
          },
          {
            id: 13,
            time: '14:00'
          },
          {
            id: 14,
            time: '14:30'
          },
          {
            id: 15,
            time: '15:00'
          },
          {
            id: 16,
            time: '15:30'
          },
          {
            id: 17,
            time: '16:30'
          },
          {
            id: 18,
            time: '17:30'
          },
          {
            id: 19,
            time: '18:00'
          }
        ]
      }
    ],
    currentSession: 0 // 控制swiper显示的时段
  },

  /**
   * 下拉框选择家人事件（同步老人id和姓名）
   */
  onFamilyChange(e) {
    const index = e.detail.value;
    const selectedItem = this.data.familyOptions[index];

    this.setData({
      familyIndex: index,
      'formData.family': selectedItem.name,
      'formData.familyId': selectedItem.id // 存储老人id
    });
  },

  // 返回上一页
  toMy() {
    wx.navigateBack();
  },

  // 初始化日期（今日 + 默认选中今日）
  initDateAndTime() {
    const now = new Date();
    const formattedDate = this.formatDate(now);
    this.setData({
      today: formattedDate,
      'formData.selectedDate': formattedDate
    });
    this.updateTimeListAvailability(formattedDate);
  },

  // 日期格式化（YYYY-MM-DD）
  formatDate(date) {
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    return `${year}-${month}-${day}`;
  },

  // 更新时间选项可用性（今日过滤已过时间）
  updateTimeListAvailability(selectedDateStr) {
    const todayStr = this.data.today;
    const isToday = selectedDateStr === todayStr;
    let updatedSessions = JSON.parse(JSON.stringify(this.data.timeSessions));

    if (isToday) {
      const now = new Date();
      const currentTotalMinutes = now.getHours() * 60 + now.getMinutes();
      const convertTimeToMinutes = (timeStr) => {
        const [hours, minutes] = timeStr.split(':').map(Number);
        return hours * 60 + minutes;
      };

      updatedSessions.forEach(session => {
        session.times.forEach(timeObj => {
          timeObj.disabled = convertTimeToMinutes(timeObj.time) < currentTotalMinutes;
        });
      });
    } else {
      updatedSessions.forEach(session => {
        session.times.forEach(timeObj => {
          timeObj.disabled = false;
        });
      });
      this.setData({
        'formData.selectedTime': '',
        isSelect: 0
      });
    }

    this.setData({
      timeSessions: updatedSessions
    });
  },

  // 日期选择器变化
  onDateChange(e) {
    const newSelectedDate = e.detail.value;
    this.setData({
      'formData.selectedDate': newSelectedDate,
      currentSession: 0
    });
    this.updateTimeListAvailability(newSelectedDate);
  },

  // 选择具体时间
  onSelectTime(e) {
    const selectedTime = e.currentTarget.dataset.time;
    const isDisabled = e.currentTarget.dataset.disabled;

    if (isDisabled) return;

    if (this.data.formData.selectedTime === selectedTime) {
      this.setData({
        'formData.selectedTime': '',
        isSelect: 0
      });
    } else {
      this.setData({
        'formData.selectedTime': selectedTime,
        isSelect: 1
      });
    }
  },

  // 时段标签点击（切换swiper）
  onTabClick(e) {
    this.setData({
      currentSession: e.currentTarget.dataset.index
    });
  },

  // swiper滑动（同步标签高亮）
  onSwiperChange(e) {
    this.setData({
      currentSession: e.detail.current
    });
  },

  // 表单提交（核心：探访预约逻辑）
  formSubmit(e) {
    const {
      name,
      phone
    } = e.detail.value;
    const {
      familyId,
      selectedDate,
      selectedTime
    } = this.data.formData;
    const {
      userId
    } = this.data;

    // 表单校验（增加老人选择校验）
    if (!name.trim()) {
      wx.showToast({
        title: '请输入预约人姓名',
        icon: 'none'
      });
      return;
    }
    if (!phone.trim()) {
      wx.showToast({
        title: '请输入预约人手机号',
        icon: 'none'
      });
      return;
    }
    const phoneReg = /^1[3-9]\d{9}$/;
    if (!phoneReg.test(phone.trim())) {
      wx.showToast({
        title: '请输入正确的11位手机号',
        icon: 'none'
      });
      return;
    }
    if (!familyId) { // 必须选择老人（探访预约关联老人）
      wx.showToast({
        title: '请选择探访的老人',
        icon: 'none'
      });
      return;
    }
    if (!selectedTime) {
      wx.showToast({
        title: '请选择预约时间段',
        icon: 'none'
      });
      return;
    }

    // 处理完整预约时间（带秒）
    const fullTime = `${selectedDate} ${selectedTime}:00`;

    // 整理提交数据（类型为“探访预约”，额外字段留空）
    const submitData = {
      appointmentType: "探访预约", // 固定类型
      wxUserId: userId, // 当前用户ID
      applicantName: name.trim(), // 预约人姓名
      phone: phone.trim(), // 预约人手机号
      elderlyId: familyId, // 选中的老人ID
      appointmentTime: fullTime, // 完整预约时间
      creator: userId, // 创建人ID
      status: "待上门", // 初始状态
      arrivalTime: null, // 未到院
      extraField1: "", // 额外字段1留空
      extraField2: "" // 额外字段2留空
    };

    // 发起请求（地址与参观预约一致）
    request({
      url: '/commanage/yuyue', // 相同请求地址
      method: 'POST',
      data: submitData,
      success: (res) => {
        if (res.data.code === 200 || res.data.success) {
          wx.showToast({
            title: '探访预约提交成功',
            icon: 'success',
            duration: 1500
          });
          // 提交成功后返回上一页
          setTimeout(() => {
            wx.navigateBack();
          }, 1500);
        } else {
          wx.showToast({
            title: res.data.msg || '提交失败，请重试',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('探访预约请求失败：', err);
        wx.showToast({
          title: '网络异常，请检查网络',
          icon: 'none'
        });
      }
    });
  },

  // 页面加载
  onLoad() {
    this.initDateAndTime();
    const userInfo = wx.getStorageSync('loginUserInfo');
    const currentUserId = userInfo?.userId || 0;
    this.setData({
      userId: currentUserId
    });

    // 请求老人列表（用于下拉选择，新增去重逻辑）
    request({
      url: '/elderly/room/info',
      method: 'GET',
      data: {
        wxUserId: currentUserId
      },
      success: (res) => {
        console.log('老人原始数据：', res.data);
        // 核心：基于elderlyId去重，用Map保留唯一记录
        const uniqueElderlyMap = new Map();
        res.data.forEach(item => {
          // 以elderlyId为key，若Map中没有则添加（避免重复）
          if (!uniqueElderlyMap.has(item.elderlyId)) {
            uniqueElderlyMap.set(item.elderlyId, item);
          }
        });
        // 将去重后的Map转为数组，再格式化为下拉选择所需结构
        const familyList = Array.from(uniqueElderlyMap.values()).map(item => ({
          id: item.elderlyId,
          name: item.elderlyName
        }));
        this.setData({
          familyOptions: familyList
        });

        // 无老人数据时显示弹窗（基于去重后的数据判断）
        if (familyList.length < 1) {
          this.setData({
            showModal: true
          });
        }
      }
    });
  },

  // 弹窗确认按钮（跳转添加老人页面）
  onConfirm() {
    this.setData({
      showModal: false
    });
    wx.redirectTo({
      url: '/pages/logs/bdjr/ljbd/ljbd'
    });
  }
});